import re

# 返回匹配上的子字符串及其索引范围
# match() 必须从头开始匹配
print(re.match("Hello", "Hello World"))  # <re.Match object; span=(0, 5), match='Hello'>
print(re.match("Hello", "8Hello World"))  # None
# search() 全局寻找，从头开始找，找到一个就停止不去管后面的内容
print(re.search("Hello", "8Hello World Hello World"))  # <re.Match object; span=(1, 6), match='Hello'>
#  search() 全局寻找，从头开始找，找到所有匹配的
print(re.findall("Hello", "8Hello World Hello World"))  # ['Hello', 'Hello']

# 监测字符串全是数字？\d
print(re.match(r"\d+", "123as"))  # <re.Match object; span=(0, 3), match='123'>
print(re.match(r"\d+", "12as3"))  # <re.Match object; span=(0, 2), match='12'>

print(re.match(r"\s+$", "     1"))  # None，要求直到结尾都是空格
print(re.match(r"^[1,2,3]", "123"))  # <re.Match object; span=(0, 1), match='1'>
print(re.match(r"^[1,2,3]+", "123"))  # <re.Match object; span=(0, 3), match='123'>
print(re.match(r"^abc{1,5}$", "abc"))  # <re.Match object; span=(0, 3), match='abc'>
print(re.match(r"^abc{1,5}$", "abcccc"))  # <re.Match object; span=(0, 6), match='abcccc'>
'''
\w ： 匹配字母 数字 下划线   
\W ：匹配非（字母 数字 下划线）
\s ：匹配空格
\n ：匹配换行符
\t ：匹配制表符
\d : 匹配数字
^  ：匹配开头   
$ ：匹配结尾
.  ：匹配任意字符
[] ：匹配区间
+  ：匹配多个至少1个
*  ：匹配多个至少0个
?  ：匹配0或1次
{3}：匹配个数
{3,}：最少匹配个数
{3,5}：匹配个数范围
|  ：或者
'''
